﻿using MediatR;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Security.Claims;

namespace S.PurchaseAndSales.Api.Extensions.Filter
{
    //public class UniversalAuthorizationFilter : IAsyncAuthorizationFilter
    //{
        //private readonly IMediator mediator;
        //private readonly IConfiguration Configuration;
        //private readonly ICustomJWTService customJWTService;

        //public UniversalAuthorizationFilter(IMediator mediator, IConfiguration configuration, ICustomJWTService customJWTService)
        //{
        //    this.mediator = mediator;
        //    this.Configuration = configuration;
        //    this.customJWTService = customJWTService;
        //}

        //public Task OnAuthorizationAsync(AuthorizationFilterContext context)
        //{
        //    string token = context.HttpContext.Request.Headers["Authorization"];
        //    if (string.IsNullOrEmpty(token))
        //    {
        //        // 返回一个表示令牌缺失的自定义响应
        //        context.HttpContext.Response.StatusCode = 401;
        //        context.HttpContext.Response.Headers.Add("Content-Type", "text/plain");
        //        context.HttpContext.Response.WriteAsync("Token is missing");
        //        return Task.CompletedTask;
        //    }
        //    string menuid = context.HttpContext.Request.Headers["menuid"];
        //    int Menuid = 0;
        //    if (!string.IsNullOrEmpty(menuid))
        //    {
        //        Menuid = int.Parse(menuid);
        //    }
        //    else
        //    {
        //        context.HttpContext.Response.StatusCode = 404;
        //        context.HttpContext.Response.Headers.Add("Content-Type", "text/plain");
        //        context.HttpContext.Response.WriteAsync("没有权限访问该地址");
        //        return Task.CompletedTask;
        //    }
        //    int uid = Convert.ToInt32(context.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);

        //    var menulist = mediator.Send(new MenuGetCommand() { uid = uid }).Result;
        //    MenuListChildren foundNode = new MenuListChildren();
        //    if (menulist != null)
        //    {
        //        foundNode = FindNodeById(menulist, Menuid);
        //    }
        //    else
        //    {
        //        context.HttpContext.Response.StatusCode = 404;
        //        context.HttpContext.Response.Headers.Add("Content-Type", "text/plain");
        //        context.HttpContext.Response.WriteAsync("没有权限访问该地址");
        //        return Task.CompletedTask;
        //    }

        //    if (foundNode != null)
        //    {
        //        return Task.CompletedTask;
        //    }
        //    else
        //    {
        //        context.HttpContext.Response.StatusCode = 404;
        //        context.HttpContext.Response.Headers.Add("Content-Type", "text/plain");
        //        context.HttpContext.Response.WriteAsync("没有权限访问该地址");
        //        return Task.CompletedTask;
        //    }
        //}

        //public MenuListChildren FindNodeById(List<MenuListChildren> tree, int id)
        //{
        //    foreach (var node in tree)
        //    {
        //        if (node.Id == id)
        //        {
        //            return node;
        //        }

        //        if (node.Children != null && node.Children.Count > 0)
        //        {
        //            var foundNode = FindNodeById(node.Children, id);
        //            if (foundNode != null)
        //            {
        //                return foundNode;
        //            }
        //        }
        //    }

        //    return null;
        //}
    //}
}
